目前回覆的內容還只是把收到的文字重新傳回去,並沒有連到前面的睡眠分析功能。那如果要把 LINE、Java Server、Gemini 和前面的分析功能全部串起來,資料將會是如何一路傳遞的?
就是資料在系統中,從一個元件傳到另一個元件的過程圖。以使用者從 LINE 輸入「我最近的睡眠時數是多少?」為例,這個問題不會直接交給 Gemini,而是會經過好幾個步驟:
有了這個圖,可以方便我們清楚各個元件負責的部分以利續寫程式和協助除錯。
在這個睡眠分析助手裡,LINE 主要為使用者操作的介面,負責讓使用者輸入問題以及顯示最後的回答;Java Server 負責接收 LINE 的 Webhook Event、呼叫原本的分析流程,最後再透過 Reply Message API 將結果傳回 LINE。而 Gemini 則是理解使用者想問什麼、判斷要使用哪一項分析,並將 Java 計算出的結果整理成合理的回答。

在 Web 中的取得問題的變數叫做 userQuery,而 LINE Webhook 中取得的問題叫做 userMessage,但在 Java Server 裡它們基本上其實都只是 String。因此對後面的分析功能來說,其實不需要知道問題是從 Web 還是 LINE 傳進來的。只要最後都整理成 Java 可以處理的文字,就能交給同一個分析流程。從這裡也可以發現,使用者輸入的介面和真正的分析邏輯是可以分開處理的。
如果直接把 Gemini 和睡眠資料分析全部寫進 WebhookHandler,這些功能就會和 LINE 綁在一起。當 Web 也需要相同的分析功能時,就可能需要重複撰寫或維護相似的程式碼。所以讓 WebhookHandler 只需要取得 LINE 傳來的資料,再把問題交給原本的 GeminiService 和 SleepAnalyzer,就能讓 Web 和 LINE 共用同一套分析流程。
最後重新從 LINE 輸入:
「我的平均睡眠時數是多少?」和「我需要注意什麼?」
這次 Java Backend 不再只是把原本的問題傳回來,而是會進入前面完成的睡眠分析流程,再將分析結果透過 Reply Message API 回覆到 LINE。